home *** CD-ROM | disk | FTP | other *** search
Text File | 2002-05-10 | 27.3 KB | 1,049 lines |
- // sliders.cnh
-
- // -------------------------------------------------------------
- // Constructors
- // -------------------------------------------------------------
-
- // Init func Predeclaration
- func Gui_Component NewSliderH(Menu_Material _pSlide,i32x _iSize);
- func Gui_Component NewSliderV(Menu_Material _pSlide,i32x _iSize);
- func Gui_Component NewSliderCompositeV(Menu_Material _pSlide,i32x _iSize, Menu_Material _pUpButton, Menu_Material _pDownButton, Menu_Material _pTexture);
- // Message
- message SldChange(Gui_Component _pthis,f32x _fValue);
- message SldValue(f32x _fValue);
- message QuietSldValue(f32x _fValue);
- message SldParam(f32x _fMin,f32x _fMax,f32x _fStep);
- message SldSize(i32x _iSize);
- message SldPosition(i32x _iPosition);
-
- // -------------------------------------------------------------
- // -------------------------------------------------------------
-
- // Standard sliders
- // Data class
- class Gui_dtSlider
- {
- var f32x fValue; // current value
- var f32x fMin; // min value
- var f32x fMax; // max value
- var f32x fStep; // minimum step
- var i32x iSize; // slider pixel amplitude movement
- var i32x bDrag; // true when slide is drag by mouse
- var i32x iDragOffset; // pix offset for slide drag
- // Optim
- var i32x iSldSize; // slider size in pixel
- var f32x fCoef; // Pix/value coef
- };
-
- class Gui_dtSliderComposite
- {
- // gui element
- var Gui_Component gcUpOrLeftButton;
- var Gui_Component gcDownOrRightButton;
- var Gui_Component gcTexture;
- var Gui_Component gcSlider;
-
- // var
- var boolx bMouseDown;
- var f32x fMove;
- };
-
- // Predeclaration
- func void Slider_OnEnter(i32x _iX,i32x _iY);
- func void Slider_OnLeave(i32x _iX,i32x _iY);
- func i32x SliderH_OnMouseDown(i32x _iX,i32x _iY,i32x _iButton);
- func i32x SliderV_OnMouseDown(i32x _iX,i32x _iY,i32x _iButton);
- func i32x Slider_OnMouseUp(i32x _iX,i32x _iY,i32x _iButton);
- func i32x SliderH_OnMouseMove(i32x _iX,i32x _iY);
- func i32x SliderV_OnMouseMove(i32x _iX,i32x _iY);
- func i32x SliderV_OnMouseRoll(i32x _iX,i32x _iY,i32x _iZ);
- //func i32x Slider_OnKeyDown(i32x _iKey,i32x _iCount);
- //func i32x Slider_OnKeyUp(i32x _iKey);
- func i32x Slider_OnGainFocus();
-
- func void SliderH_SetValue(f32x _fValue);
- func void SliderH_QuietSldValue(f32x _fValue);
- func void SliderV_SetValue(f32x _fValue);
- func void SliderV_QuietSldValue(f32x _fValue);
- func void Slider_SetParam(f32x _fMin,f32x _fMax,f32x _fStep);
- func void SliderH_SetSize(i32x _iSize);
- func void SliderV_SetSize(i32x _iSize);
-
- func void SliderH_SetPosition(i32x _iPosition);
- func void SliderV_SetPosition(i32x _iPosition);
- func i32x Slider_iComputePosition(Gui_dtSlider _pdtSlider,f32x _fValue);
-
- func void SliderComposite_SldChange(Gui_Component _pthis,f32x _fValue);
- func i32x SliderCompositeV_OnClickDown(Gui_Component _pComponent);
- func i32x SliderCompositeH_OnClickDown(Gui_Component _pComponent);
- func void SliderCompositeH_SetSize(i32x _iSize);
- func void SliderCompositeV_SetSize(i32x _iSize);
-
- func i32x SliderCompositeH_OnLoop(f32x _fDelta);
- func i32x SliderCompositeV_OnLoop(f32x _fDelta);
- func void SliderCompositeH_OnMouseUp(Gui_Component _pComponent);
- func void SliderCompositeV_OnMouseUp(Gui_Component _pComponent);
-
- // Message handling interface
- interface Gui_iSliderH
- {
- // Gui System Messages
- // Slider_OnKeyUp KeyUp;
- // Slider_OnKeyDown KeyDown;
- Slider_OnEnter MouseEnter;
- Slider_OnLeave MouseLeave;
- SliderH_OnMouseMove MouseMove;
- SliderH_OnMouseDown MouseDown;
- Slider_OnMouseUp MouseUp;
- // Slider_OnMouseRoll MouseRoll
- Slider_OnGainFocus GainFocus;
-
- // Slider messsage
- SliderH_SetValue SldValue;
- SliderH_QuietSldValue QuietSldValue;
- Slider_SetParam SldParam;
- SliderH_SetSize SldSize;
- SliderH_SetPosition SldPosition;
- }
- interface Gui_iSliderV
- {
- // Gui System Messages
- // Slider_OnKeyUp KeyUp;
- // Slider_OnKeyDown KeyDown;
- Slider_OnEnter MouseEnter;
- Slider_OnLeave MouseLeave;
- SliderV_OnMouseMove MouseMove;
- SliderV_OnMouseDown MouseDown;
- Slider_OnMouseUp MouseUp;
- SliderV_OnMouseRoll MouseRoll;
- Slider_OnGainFocus GainFocus;
-
- // Slider messsage
- SliderV_SetValue SldValue;
- SliderV_QuietSldValue QuietSldValue;
- Slider_SetParam SldParam;
- SliderV_SetSize SldSize;
- SliderV_SetPosition SldPosition;
- }
-
- interface Gui_iSliderCompositeV
- {
- SliderCompositeV_OnClickDown ClickDown;
- SliderCompositeV_SetSize SldSize;
- SliderComposite_SldChange SldChange;
- }
-
- interface Gui_iSliderCompositeH
- {
- SliderCompositeH_OnClickDown ClickDown;
- SliderCompositeH_SetSize SldSize;
- SliderComposite_SldChange SldChange;
- }
-
- interface Gui_iSliderCompositeV_Loop
- {
- SliderCompositeV_OnLoop Loop;
-
- SliderCompositeV_OnMouseUp ClickUp;
- SliderComposite_SldChange SldChange;
- }
-
- interface Gui_iSliderCompositeH_Loop
- {
- SliderCompositeH_OnLoop Loop;
-
- SliderCompositeH_OnMouseUp ClickUp;
- SliderComposite_SldChange SldChange;
- }
-
- /*
- * Function : Slider constructor
- * Parameters : _pMaterial material pointer
- */
- func Gui_Component NewSliderH(Menu_Material _pSlide,i32x _iSize)
- {
- var Menu_Sprite sprite;
- var Gui_Component container;
- var Gui_dtSlider pdtSlider;
- var f32x sx,sy,f;
- var i32x iArea;
-
- // Create container with button interface
- container = NewContainer(Gui_iSliderH);
- CatchEvent(container,e_GUI_Event_Mouse_Move);
-
- // Create new data structure
- pdtSlider = new Gui_dtSlider;
- SetData(container,pdtSlider);
-
- // Create a sprite with material and area index e_GUI_State_Enabled
- sprite = NewSprite2D(_pSlide);
- iArea = e_GUI_State_Enabled;
- SetArea(sprite,iArea);
-
- // Get size of area of index e_GUI_State_Enabled
- sx = GetAreaWidth(_pSlide,iArea);
- sy = GetAreaHeight(_pSlide,iArea);
-
- // Init data
- f=_iSize;
- f=f-sx;
- pdtSlider.iSize = f+0.5; // minimum size
- pdtSlider.fMin = 0.0; // minimum value
- pdtSlider.fMax = 1.0; // maximum value
- pdtSlider.fValue = 1.0;
- pdtSlider.fCoef = f/(pdtSlider.fMax-pdtSlider.fMin);
- pdtSlider.fStep = 1.0/pdtSlider.fCoef; // default step
- pdtSlider.bDrag = false;
- pdtSlider.iDragOffset = 0;
- pdtSlider.iSldSize = sx+0.5;
- // Slider_SetValue(pdtSlider.fMin);
-
- // Strech container to area size
- StretchTo(container,_iSize,sy);
-
- // Define align center/center
- SetAlign(container,e_GUI_HAlign_Center,e_GUI_VAlign_Center);
-
- // Attach the sprite to this container
- AttachSprite(container,sprite);
-
- // init slider position
- container<<SldValue(0.0);
-
- return container;
- }
-
- func Gui_Component NewSliderCompositeV(Menu_Material _pSlide,i32x _iSize, Menu_Material _pUpButton, Menu_Material _pDownButton, Menu_Material _pTexture)
- {
- var Menu_Sprite sprite;
- var Gui_Component composite;
- var Gui_dtSliderComposite pdtSlider;
- var f32x sx_slider,sy_slider,f, sy_button, sx_button;
- var i32x iArea;
-
- // Create an object that will contain Bitmap buttons + slider
- composite = NewObject(Gui_iSliderCompositeV);
-
- // three component in composite slider
- SetComponentNumber(composite,4);
-
- // Create new data structure
- pdtSlider = new Gui_dtSliderComposite;
- SetData(composite,pdtSlider);
-
- // create button
- pdtSlider.gcUpOrLeftButton = NewButtonDyn(_pUpButton);
- pdtSlider.gcDownOrRightButton = NewButtonDyn(_pDownButton);
- sy_button = SizeY(pdtSlider.gcUpOrLeftButton);
- sx_button = SizeX(pdtSlider.gcUpOrLeftButton);
- // stretch button
- StretchTo(pdtSlider.gcUpOrLeftButton,sx_button,sy_button);
- StretchTo(pdtSlider.gcDownOrRightButton,sx_button,sy_button);
- MoveTo(pdtSlider.gcDownOrRightButton,0,_iSize-sy_button);
-
- // Create background texture
- pdtSlider.gcTexture = NewBitmap(smWhite,0);
- SetAlign(pdtSlider.gcTexture,e_GUI_HAlign_Zoom,e_GUI_VAlign_Zoom);
- StretchTo(pdtSlider.gcTexture,2.0*g_fScreenScaleFactor,(_iSize-(2.0*sy_button+0.5)));
- MoveTo(pdtSlider.gcTexture,(sx_button/2),sy_button);
- // Disable texture
- pdtSlider.gcTexture<<Disable();
-
- // Create container with button interface
- pdtSlider.gcSlider = NewSliderV(_pSlide,(_iSize-((2.0*sy_button)+0.5)));
- var f32x fPosX;
- fPosX = (sx_button-SizeX(pdtSlider.gcSlider))/2;
- MoveTo(pdtSlider.gcSlider, fPosX, sy_button);
-
- // Get size of area of index e_GUI_State_Enabled
- sx_slider = SizeX(pdtSlider.gcSlider);
- sy_slider = SizeY(pdtSlider.gcSlider);
-
- MoveTo(pdtSlider.gcSlider,(sx_button-sx_slider)/2.0,sy_button);
-
- // Strech container to area size
- if (sx_slider < sx_button)
- sx_slider = sx_button;
- StretchTo(composite,sx_slider,_iSize);
-
- // Mount
- MountComponent(composite,pdtSlider.gcUpOrLeftButton);
- MountComponent(composite,pdtSlider.gcDownOrRightButton);
- MountComponent(composite,pdtSlider.gcTexture);
- MountComponent(composite,pdtSlider.gcSlider);
-
- return composite;
- }
-
- func Gui_Component NewSliderCompositeH(Menu_Material _pSlide,i32x _iSize, Menu_Material _pUpButton, Menu_Material _pDownButton, Menu_Material _pTexture)
- {
- var Menu_Sprite sprite;
- var Gui_Component composite;
- var Gui_dtSliderComposite pdtSlider;
- var f32x sx_slider,sy_slider,f, sy_button, sx_button;
- var i32x iArea;
-
- // Create an object that will contain Bitmap buttons + slider
- composite = NewObject(Gui_iSliderCompositeH);
-
- // three component in composite slider
- SetComponentNumber(composite,4);
-
- // Create new data structure
- pdtSlider = new Gui_dtSliderComposite;
- SetData(composite,pdtSlider);
-
- // create button
- pdtSlider.gcUpOrLeftButton = NewButtonDyn(_pUpButton);
- pdtSlider.gcDownOrRightButton = NewButtonDyn(_pDownButton);
- sy_button = SizeY(pdtSlider.gcUpOrLeftButton);
- sx_button = SizeX(pdtSlider.gcUpOrLeftButton);
- MoveTo(pdtSlider.gcDownOrRightButton,_iSize-sx_button,0);
-
- // Create background texture
- pdtSlider.gcTexture = NewBitmap(smWhite,0);
- SetAlign(pdtSlider.gcTexture,e_GUI_HAlign_Zoom,e_GUI_VAlign_Zoom);
- StretchTo(pdtSlider.gcTexture,(_iSize-(2.0*sx_button+0.5)),2.0*g_fScreenScaleFactor);
- MoveTo(pdtSlider.gcTexture,sx_button,(sy_button/2));
- // Disable texture
- pdtSlider.gcTexture<<Disable();
-
- // Create container with button interface
- pdtSlider.gcSlider = NewSliderH(_pSlide,(_iSize-((2.0*sx_button)+0.5)));
- var f32x fPosY;
- fPosY = (sy_button-SizeY(pdtSlider.gcSlider))/2;
- MoveTo(pdtSlider.gcSlider,sx_button, fPosY);
-
- // Get size of area of index e_GUI_State_Enabled
- sx_slider = SizeX(pdtSlider.gcSlider);
- sy_slider = SizeY(pdtSlider.gcSlider);
-
- MoveTo(pdtSlider.gcSlider,sx_button,(sy_button-sy_slider)/2.0);
-
- // Strech container to area size
- if (sy_slider < sy_button)
- sy_slider = sy_button;
- StretchTo(composite,_iSize,sy_slider);
-
- // Mount
- MountComponent(composite,pdtSlider.gcUpOrLeftButton);
- MountComponent(composite,pdtSlider.gcDownOrRightButton);
- MountComponent(composite,pdtSlider.gcTexture);
- MountComponent(composite,pdtSlider.gcSlider);
-
- return composite;
- }
-
- func Gui_Component NewSliderV(Menu_Material _pSlide,i32x _iSize)
- {
- var Menu_Sprite sprite;
- var Gui_Component container;
- var Gui_dtSlider pdtSlider;
- var f32x sx,sy,f;
- var i32x iArea;
-
- // Create container with button interface
- container = NewContainer(Gui_iSliderV);
- CatchEvent(container,e_GUI_Event_Mouse_Move);
-
- // Create new data structure
- pdtSlider = new Gui_dtSlider;
- SetData(container,pdtSlider);
-
- // Create a sprite with material and area index e_GUI_State_Enabled
- sprite = NewSprite2D(_pSlide);
- iArea = e_GUI_State_Enabled;
- SetArea(sprite,iArea);
-
- // Get size of area of index e_GUI_State_Enabled
- sx = GetAreaWidth(_pSlide,iArea);
- sy = GetAreaHeight(_pSlide,iArea);
-
- // Init data
- f=_iSize;
- f=f-sy;
- pdtSlider.iSize = f+0.5; // minimum size
- pdtSlider.fMin = 0.0; // minimum value
- pdtSlider.fMax = 1.0; // maximum value
- pdtSlider.fValue = 1.0;
- pdtSlider.fCoef = f/(pdtSlider.fMax-pdtSlider.fMin);
- pdtSlider.fStep = 1.0/pdtSlider.fCoef; // default step
- pdtSlider.bDrag = false;
- pdtSlider.iDragOffset = 0;
- pdtSlider.iSldSize = sy+0.5;
-
- // Strech container to area size
- StretchTo(container,sx,_iSize);
-
- // Define align center/center
- SetAlign(container,e_GUI_HAlign_Center,e_GUI_VAlign_Center);
-
- // Attach the sprite to this container
- AttachSprite(container,sprite);
-
- // init slider position
- container<<SldValue(0.0);
-
- return container;
- }
-
- /*
- * Function : OnGainFocus
- * Return : func must return true to gain focus
- * if false is return component doesn't take focus
- * GuiMessage : "GainFocus"
- */
- func i32x Slider_OnGainFocus()
- {
- // Take focus
- return true;
- }
-
- /*
- * Function : OnLoseFocus
- * GuiMessage : "LoseFocus"
- */
- func i32x Slider_OnLoseFocus()
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
-
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- // Reset drag flag
- pdtSlider.bDrag = false;
- pdtSlider.iDragOffset = 0;
- }
-
- /*
- * Function : Slider set position
- * Remarks : _iPosition is pixel offset starting from ruler
- * Message : "Position"
- */
- func void SliderH_SetPosition(i32x _iPosition)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis,pparent;
-
- var i32x i32Value,iCorrectedPos;
- var f32x fValue,fPos,fOldValue;
-
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- // Cast position to float
- fPos = _iPosition - (pdtSlider.iSldSize/2);
-
- // Calc value
- fValue = (fPos / pdtSlider.fCoef) + pdtSlider.fMin;
-
- // Change slider pos
- fOldValue = pdtSlider.fValue;
- iCorrectedPos = Slider_iComputePosition(pdtSlider,fValue);
- if(fOldValue != pdtSlider.fValue)
- {
- iCorrectedPos = iCorrectedPos - (pdtSlider.iSize/2);
- SetXHotspot(pthis,iCorrectedPos);
- pparent = GetParent(pthis);
- if(pparent) pparent<<SldChange(pthis,pdtSlider.fValue);
- }
- }
- func void SliderV_SetPosition(i32x _iPosition)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis,pparent;
-
- var i32x i32Value,iCorrectedPos;
- var f32x fValue,fPos,fOldValue;
-
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- // Cast position to float
- fPos = _iPosition - (pdtSlider.iSldSize/2);
-
- // Calc value
- fValue = (fPos / pdtSlider.fCoef) + pdtSlider.fMin;
-
- // Change slider pos
- fOldValue = pdtSlider.fValue;
- iCorrectedPos = Slider_iComputePosition(pdtSlider,fValue);
- if(fOldValue != pdtSlider.fValue)
- {
- iCorrectedPos = iCorrectedPos - (pdtSlider.iSize/2);
- SetYHotspot(pthis,iCorrectedPos);
- pparent = GetParent(pthis);
- if(pparent) pparent<<SldChange(pthis,pdtSlider.fValue);
- }
- }
-
- /*
- * Function : return slide pos in pix from value
- * Remarks : Test if value is inside min max
- */
- func i32x Slider_iComputePosition(Gui_dtSlider _pdtSlider,f32x _fValue)
- {
- var f32x fMin,fMax,m,fNewPos;
- var i32x iNewPos;
-
- m=fmod(_fValue,_pdtSlider.fStep);
- fMin = _fValue - m;
- fMax = _fValue + ( _pdtSlider.fStep - m);
-
- if(fabs(_fValue-fMin) > fabs(_fValue-fMax))
- _pdtSlider.fValue = fMax;
- else
- _pdtSlider.fValue = fMin;
-
- if (_pdtSlider.fValue < _pdtSlider.fMin) _pdtSlider.fValue = _pdtSlider.fMin;
- if (_pdtSlider.fValue > _pdtSlider.fMax) _pdtSlider.fValue = _pdtSlider.fMax;
-
- //print("fValue"+ftoa(_pdtSlider.fValue)+"\n");
- fNewPos = ((_pdtSlider.fValue - _pdtSlider.fMin) * _pdtSlider.fCoef);
- iNewPos = fNewPos+0.5;
-
- return iNewPos;
- }
- /*
- * Function : Slider set value
- * Remarks : Test if value is inside min max
- * Message : "Value"
- */
- func void SliderH_QuietSldValue(f32x _fValue)
- {
- var f32x fOldValue;
- var i32x iCorrectedPos;
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
-
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- // Compute slider position
- fOldValue = pdtSlider.fValue;
- if(fOldValue != _fValue)
- {
- iCorrectedPos = Slider_iComputePosition(pdtSlider,_fValue);
- iCorrectedPos = iCorrectedPos - (pdtSlider.iSize/2);
- SetXHotspot(pthis,iCorrectedPos);
- }
- }
-
-
- /*
- * Function : Slider set value
- * Remarks : Test if value is inside min max
- * Message : "Value"
- */
- func void SliderH_SetValue(f32x _fValue)
- {
- var Gui_Component pthis,pparent;
- var Gui_dtSlider pdtSlider;
-
- //Change value
- SliderH_QuietSldValue(_fValue);
-
- //send message to parent
- pthis = GetThis();
- pparent = GetParent(pthis);
- pdtSlider = GetData(pthis);
-
- if(pparent) pparent<<SldChange(pthis,pdtSlider.fValue);
- }
-
-
- func void SliderV_QuietSldValue(f32x _fValue)
- {
- var f32x fOldValue;
- var i32x iCorrectedPos;
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
-
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- // Compute slider position
- fOldValue = pdtSlider.fValue;
- if(fOldValue != _fValue)
- {
- iCorrectedPos = Slider_iComputePosition(pdtSlider,_fValue);
- iCorrectedPos = iCorrectedPos - (pdtSlider.iSize/2);
- SetYHotspot(pthis,iCorrectedPos);
- }
- }
- func i32x SliderV_OnMouseRoll(i32x _iX,i32x _iY,i32x _iZ)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
- var f32x pos, sy;
-
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- sy = SizeY(pthis);
- pos = GetYHotspot(pthis) + (sy / 2);
-
- pos = pos - (_iZ /12.0);
- pthis<<SldPosition(pos);
- }
-
-
- func void SliderV_SetValue(f32x _fValue)
- {
- var Gui_Component pthis,pparent;
- var Gui_dtSlider pdtSlider;
-
- //Change value
- SliderV_QuietSldValue(_fValue);
-
- //send message to parent
- pthis = GetThis();
- pparent = GetParent(pthis);
- pdtSlider = GetData(pthis);
-
- if(pparent) pparent<<SldChange(pthis,pdtSlider.fValue);
- }
-
- /*
- * Function : Slider set range and step value
- * Remarks : Swap min max if needed
- * Message : "Min"
- */
- func void Slider_SetParam(f32x _fMin,f32x _fMax,f32x _fStep)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
- var f32x fSize;
-
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- if(_fMax<=_fMin)
- {
- print("SliderWarning:"+ftoa(_fMin)+"-"+ftoa(_fMax)+" Bad range !");
- }
- else
- {
- pdtSlider.fMin = _fMin; // minimum value
- pdtSlider.fMax = _fMax; // maximum value
- fSize = pdtSlider.iSize;
- pdtSlider.fCoef = fSize/(pdtSlider.fMax-pdtSlider.fMin);
- pdtSlider.fStep = _fStep; // default step
- }
- }
-
- /*
- * Function : Slider set pixel width
- * Remarks : warning if size to small
- * Message : "SldSize"
- */
- func void SliderH_SetSize(i32x _iSize)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
- var f32x fSize,fval;
-
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- StretchTo(pthis,_iSize,SizeY(pthis));
-
- if(_iSize<=pdtSlider.iSldSize)
- {
- print("SliderWarning:"+ftoa(_iSize)+" Bad size !");
- }
- else
- {
- fSize = _iSize - pdtSlider.iSldSize;
- pdtSlider.iSize = fSize;
- pdtSlider.fCoef = fSize/(pdtSlider.fMax-pdtSlider.fMin);
- // Update slider position
- fval=pdtSlider.fValue;
- pdtSlider.fValue = pdtSlider.fMin -1.0;
- pthis<<QuietSldValue(fval);
- }
- }
- func void SliderV_SetSize(i32x _iSize)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
- var f32x fSize,fval;
-
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- StretchTo(pthis,SizeX(pthis),_iSize);
-
- if(_iSize<=pdtSlider.iSldSize)
- {
- print("SliderWarning:"+ftoa(_iSize)+" Bad size !");
- }
- else
- {
- fSize = _iSize - pdtSlider.iSldSize;
- pdtSlider.iSize = fSize;
- pdtSlider.fCoef = fSize/(pdtSlider.fMax-pdtSlider.fMin);
- // Update slider position
- fval=pdtSlider.fValue;
- pdtSlider.fValue = pdtSlider.fMin -1.0;
- pthis<<QuietSldValue(fval);
- }
- }
-
- /*
- * Function : OnMouseUp
- * Parameters : _iX : absolute mouse x position
- * Parameters : _iY : absolute mouse y position
- * Parameters : _iButton : index of button
- * GuiMessage : "MouseUp"
- */
- func i32x Slider_OnMouseUp(i32x _iX,i32x _iY,i32x _iButton)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
-
- if(_iButton == e_Gui_Mouse_Left_Button)
- {
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
-
- // Reset drag flag
- pdtSlider.bDrag = false;
- pdtSlider.iDragOffset = 0;
- }
- }
-
- /*
- * Function : OnMouseDown
- * Parameters : _iX : absolute mouse x position
- * Parameters : _iY : absolute mouse y position
- * Parameters : _iButton : index of button
- * GuiMessage : "MouseDown"
- */
- func i32x SliderH_OnMouseDown(i32x _iX,i32x _iY,i32x _iButton)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
- var i32x x,bmin,bmax;
- if(_iButton == e_Gui_Mouse_Left_Button)
- {
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
- // Active drag
- pdtSlider.bDrag = true;
- // Get click position to get reference position
- x = _iX - AbsPosX(pthis);
- //
- bmin = GetXHotspot(pthis)+(pdtSlider.iSize/2);
- bmax = bmin + pdtSlider.iSldSize;
- if((x<=bmax)&&(x>=bmin))
- {
- // Click on the slider
- // keep offset between slider center
- pdtSlider.iDragOffset = x-(bmin+(pdtSlider.iSldSize/2));
- }
- else
- {
- // Click on the ruler : 0 offset
- pdtSlider.iDragOffset = 0;
- // Move slide and value correspondant to click position
- SliderH_SetPosition(x);
- }
- }
- }
- func i32x SliderV_OnMouseDown(i32x _iX,i32x _iY,i32x _iButton)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
- var i32x y,bmin,bmax;
- if(_iButton == e_Gui_Mouse_Left_Button)
- {
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
- // Active drag
- pdtSlider.bDrag = true;
- // Get click position to get reference position
- y = _iY - AbsPosY(pthis);
- //
- bmin = GetYHotspot(pthis)+(pdtSlider.iSize/2);
- bmax = bmin + pdtSlider.iSldSize;
- if((y<=bmax)&&(y>=bmin))
- {
- // Click on the slider
- // keep offset between slider center
- pdtSlider.iDragOffset = y-(bmin+(pdtSlider.iSldSize/2));
- }
- else
- {
- // Click on the ruler : 0 offset
- pdtSlider.iDragOffset = 0;
- // Move slide and value correspondant to click position
- SliderV_SetPosition(y);
- }
- }
- }
-
- /*
- * Function : OnMouseMove
- * Parameters : _iX : absolute mouse x position
- * Parameters : _iY : absolute mouse y position
- * GuiMessage : "MouseDown"
- */
- func i32x SliderH_OnMouseMove(i32x _iX,i32x _iY)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
- var i32x x,offset;
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
- if(pdtSlider.bDrag == true)
- {
- // Get click position to get reference position
- x = _iX - AbsPosX(pthis);
- // Move slide and value correspondant to click position
- SliderH_SetPosition(x-pdtSlider.iDragOffset);
- }
- }
- func void Slider_OnEnter(i32x _iX,i32x _iY)
- {
- var Gui_Component pthis;
- var Menu_Sprite sprite;
-
- pthis = GetThis();
-
- sprite = GetSprite(pthis);
- SetArea(sprite,e_GUI_State_Focus);
- }
- func void Slider_OnLeave(i32x _iX,i32x _iY)
- {
- var Gui_Component pthis;
- var Menu_Sprite sprite;
-
- pthis = GetThis();
-
- sprite = GetSprite(pthis);
- SetArea(sprite,e_GUI_State_Enabled);
- }
- func i32x SliderV_OnMouseMove(i32x _iX,i32x _iY)
- {
- var Gui_dtSlider pdtSlider;
- var Gui_Component pthis;
- var i32x y,offset;
- // Retrieve slider pointer
- pthis = GetThis();
- // Retrieve slider data
- pdtSlider = GetData(pthis);
- if(pdtSlider.bDrag == true)
- {
- // Get click position to get reference position
- y = _iY - AbsPosY(pthis);
- // Move slide and value correspondant to click position
- SliderV_SetPosition(y-pdtSlider.iDragOffset);
- }
- }
-
- func void SliderComposite_SldChange(Gui_Component _pthis,f32x _fValue)
- {
- var Gui_Component pthis, parent;
-
- pthis = GetThis();
- parent = GetParent(pthis);
-
- parent<<SldChange(pthis,_fValue);
- }
-
- func i32x SliderCompositeV_OnClickDown(Gui_Component _pComponent)
- {
- var Gui_Component pthis;
- var Gui_dtSliderComposite pdtSlider;
-
- pthis = GetThis();
- pdtSlider = GetData(pthis);
-
- // booleen permettant de savoir que le bouton de la souris est enfoncee
- pdtSlider.bMouseDown = true;
-
- // calcul du deplacement
- if (_pComponent == pdtSlider.gcUpOrLeftButton)
- {
- pdtSlider.fMove = -10.0*g_fScreenScaleFactor;
- }
- if (_pComponent == pdtSlider.gcDownOrRightButton)
- {
- pdtSlider.fMove = 10.0*g_fScreenScaleFactor;
- }
-
- // update interface
- SetInterface(pthis,Gui_iSliderCompositeV_Loop);
- }
-
- func i32x SliderCompositeH_OnClickDown(Gui_Component _pComponent)
- {
- var Gui_Component pthis;
- var Gui_dtSliderComposite pdtSlider;
-
- pthis = GetThis();
- pdtSlider = GetData(pthis);
-
- // booleen permettant de savoir que le bouton de la souris est enfoncee
- pdtSlider.bMouseDown = true;
-
- // change slider
- // SetArea(GetSprite(pdtSlider.gcSlider), 1);
-
- // calcul du deplacement
- if (_pComponent == pdtSlider.gcUpOrLeftButton)
- {
- pdtSlider.fMove = -10.0*g_fScreenScaleFactor;
- }
- if (_pComponent == pdtSlider.gcDownOrRightButton)
- {
- pdtSlider.fMove = 10.0*g_fScreenScaleFactor;
- }
-
- // update interface
- SetInterface(pthis,Gui_iSliderCompositeH_Loop);
- }
-
- func i32x SliderCompositeH_OnLoop(f32x _fDelta)
- {
- var Gui_Component pthis;
- var Gui_dtSliderComposite pdtSlider;
- var f32x pos, sx;
-
- pthis = GetThis();
- pdtSlider = GetData(pthis);
-
- sx = SizeX(pdtSlider.gcSlider);
- pos = GetXHotspot(pdtSlider.gcSlider) + (sx / 2);
-
- // if mouse down
- if (pdtSlider.bMouseDown == true)
- {
- pdtSlider.gcSlider<<SldPosition(pos + pdtSlider.fMove);
- }
- }
-
- func i32x SliderCompositeV_OnLoop(f32x _fDelta)
- {
- var Gui_Component pthis;
- var Gui_dtSliderComposite pdtSlider;
- var f32x pos, sy;
-
- pthis = GetThis();
- pdtSlider = GetData(pthis);
-
- sy = SizeY(pdtSlider.gcSlider);
- pos = GetYHotspot(pdtSlider.gcSlider) + (sy / 2);
-
- // if mouse down
- if (pdtSlider.bMouseDown == true)
- {
- pdtSlider.gcSlider<<SldPosition(pos + pdtSlider.fMove);
- }
- }
-
- func void SliderCompositeH_OnMouseUp(Gui_Component _pComponent)
- {
- var Gui_Component pthis;
- var Gui_dtSliderComposite pdtSlider;
-
- pthis = GetThis();
- pdtSlider = GetData(pthis);
-
- pdtSlider.bMouseDown = false;
-
- // update interface
- SetInterface(pthis,Gui_iSliderCompositeH);
- }
-
- func void SliderCompositeV_OnMouseUp(Gui_Component _pComponent)
- {
- var Gui_Component pthis;
- var Gui_dtSliderComposite pdtSlider;
-
- pthis = GetThis();
- pdtSlider = GetData(pthis);
-
- pdtSlider.bMouseDown = false;
-
- // update interface
- SetInterface(pthis,Gui_iSliderCompositeV);
- }
-
- func void SliderCompositeH_SetSize(i32x _iSize)
- {
- var Gui_Component pthis;
- var Gui_dtSliderComposite pdtSlider;
- var f32x sx,sy, sx_newsize;
-
- pthis = GetThis();
- pdtSlider = GetData(pthis);
-
- // send mesg to slider with new size
- sx = SizeX(pdtSlider.gcUpOrLeftButton);
- sx_newsize = _iSize-(sx*2.0);
- pdtSlider.gcSlider<<SldSize(sx_newsize);
-
- // move button
- MoveTo(pdtSlider.gcDownOrRightButton,_iSize-sx,0);
-
- // stretch texture
- sy = SizeY(pthis);
- StretchTo(pdtSlider.gcTexture,sx_newsize,2);
- // stretch slider composite
- StretchTo(pthis,_iSize,sy);
- }
-
- func void SliderCompositeV_SetSize(i32x _iSize)
- {
- var Gui_Component pthis;
- var Gui_dtSliderComposite pdtSlider;
- var f32x sx,sy, sy_newsize;
-
- pthis = GetThis();
- pdtSlider = GetData(pthis);
-
- // send mesg to slider with new size
- sy = SizeY(pdtSlider.gcUpOrLeftButton);
- sy_newsize = _iSize-(sy*2.0);
- pdtSlider.gcSlider<<SldSize(sy_newsize);
-
- // move button
- MoveTo(pdtSlider.gcDownOrRightButton,0,_iSize-sy);
-
- // stretch texture
- sx = SizeX(pthis);
- StretchTo(pdtSlider.gcTexture,2,sy_newsize);
- // stretch slider composite
- StretchTo(pthis,sx,_iSize);
- }
-